package com.hlf.modules.sys.service;

import com.hlf.modules.sys.entity.File;

import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.List;


/**
 * 文件服务层接口
 * 
 * @author shuliangxing
 * 
 * @date 2015-1-14上午11:33:49
 */
public interface FileService {

    /**
     * 根据id删除
     *
     * @param id
     * @return
     */
    int deleteById(Long id);

    /**
     * 新增
     *
     * @param record
     * @return
     */
    int insert(File record);

    /**
     * 非空字段新增
     *
     * @param record
     * @return
     */
    int insertSelective(File record);

    /**
     * 根据id查询
     *
     * @param id
     * @return
     */
    File selectById(Long id);

    /**
     * 根据id更新非空字段
     *
     * @param record
     * @return
     */
    int updateByIdSelective(File record);

    /**
     * 根据id更新
     *
     * @param record
     * @return
     */
    int updateById(File record);

    // 分割线

    /**
     * 根据id删除
     *
     * @param id
     * @return
     */
    int deleteSoft(Long id);

    /**
     * 上传表单中所有文件
     *
     * @param request
     * @param filType
     *            文件类型
     * @param filTypeName
     *            文件类型名称
     * @param typePath
     *            文件类型路径
     * @return
     */
    List<File> uploadFile(HttpServletRequest request, String filType, String filTypeName, String typePath)
            throws IOException;

    /**
     * 上传文件，可指定需要上传的文件属性名称、文件大小和数量等
     *
     * @param request
     * @param filType
     *            文件类型
     * @param filTypeName
     *            文件类型名称
     * @param typePath
     *            文件类型路径
     * @param attrName
     *            文件属性名称（表单中文件控件的name属性）,等于null时上传全部文件
     * @param maxSize
     *            允许上传文件的最大大小，单位B,为null时表示没有大小限制
     * @param minCount
     *            允许上传文件的最小数量，等于null时表示没有限制
     * @param maxCount
     *            允许上传文件的最大数量，等于null时表示没有限制
     * @return 文件信息集合
     * @throws IOException
     *             io异常
     * @author shuliangxing
     * @date 2017年3月30日 下午3:13:51
     */
    List<File> uploadFile(HttpServletRequest request, String filType, String filTypeName, String typePath,
                          String attrName, Long maxSize, Integer minCount, Integer maxCount) throws IOException;

    /**
     * 根据文件类型和外键id查询文件集合
     *
     * @param filType
     *            文件类型
     * @param foreignId
     *            外键id
     * @return
     */
    List<File> select(String filType, Long foreignId);

    /**
     * 根据文件对应外键id删除
     *
     * @param foreignId
     * @return
     */
    String deleteByForeignId(Long foreignId);

    /**
     * 批量新增
     *
     * @param list
     * @return
     */
    int inserts(List<File> list);

    /**
     * 上传图片
     *
     * @param filType
     * @param filTypeName
     * @param typePath
     * @param oriName
     *            图片原始名称
     * @param oriSuffix
     *            图片文件后缀
     * @param oriSize
     *            图片文件大小,单位b
     * @param size
     * @return
     * @throws IOException
     */
    File uploadImg(String filType, String filTypeName, String typePath, String oriName, String oriSuffix, int oriSize,
                   int size) throws IOException;
    String deleteByForeignIdAndFilType(Long foreignId, String filType);

    int deleteSoftByForeignIdAndFilType(long foreignId, String filType);

    /**
     * 更新头像
     */
    int updateMerchantImg(File file);

    /**
     * 查询图片集合
     * @param foreignId
     * @return
     */
    List<File> selectByForeignId(Long foreignId);

    /**
     * 删除
     * @param fileId
     */
    void delete(HttpServletRequest request,Long fileId);
}
